6. 클래스 인라인하기

클래스 추출하기(7.5)의 반대

  • 제 역할을 못 해서 그대로 두면 안 되는 클래스가 대상
    • 역할을 옮기는 리패터링 후 특정 클래스에 남은 역할이 거의 없을 때 주로 발생
    • 이 클래스의 역할을 가장 많이 사용하는 클래스로 흡수
  • 두 클래스의 기능을 지금과 다르게 배분하고 싶을 때에도 사용
    • 두 클래스를 인라인 해서 하나로 합친 두, 다시 새로운 클래스로 추출(7.5)

절차


  1. 소스 클래스의 각 public 메서드에 대응하는 메서스들을 타깃 클래스에 생성한다. 이 메서드들은 단순히 작업을 소스 클래스로 위임해야 한다.
  2. 소스 클래스의 메서드를 사용하는 코드를 모두 타깃 클래스의 위임 메서드를 사용하도록 바꾼다. 하나씩 바꿀 때마다 테스트한다.
  3. 소스 클래스의 메서드와 필드를 모두 타깃 클래스로 옮긴다. 하나씩 옮길 때마다 테스트한다.
  4. 소스 클래스를 삭제하고 조의를 표한다.

예시 코드

😞 Before

class Person {
    get officeAreaCode() {
    return this._telephoneNumber.areaCode
    }
    get officeNumber() {
    return this._telephoneNumber.number
    }
}

class TelephoneNumber {
    get areaCode() {
    return this._areaCode
    }
    get number() {
    return this._number
    }
}

😃 After

class Person {
    get officeAreaCode() {
    return this._officeAreaCode
    }
    get officeNumber() {
    return this._officeNumber
    }
}

results matching ""

    No results matching ""